import jwt
from comment.modules.user import User
from flask import current_app
from jwt import PyJWTError
from datetime import datetime,timedelta
from comment.utils import const
def generate_tokens(uid):
    '''
    一个用户在一次会话生成一个tokens
    :param uid:
    :return:
    '''
    params={
        'id':uid,
        #exp，代表token的有效时间
        'exp':datetime.utcnow()  +  timedelta(seconds=const.JWT_EXPIRY_SECOND)
    }                              #参数2，密钥，参数2，算法
    return jwt.encode(payload=params,key=const.SECRET_KEY,algorithm='HS256') #HS-256密码散列函数算法

def verify_tokens(token_str):
    '''
    验证token，如果成功返回用户id
    :param token_str:
    :return:
    '''
    try:
        #jwt的decode时一个验证函数，不是解码
        date = jwt.decode(token_str,key=const.SECRET_KEY,algorithms='HS256')
        current_app.logger.info(date)
        user = User.query.filter(User.id == date['id']).first()
        if user and user.onlock ==0:    #当前用户状态正常
            return {'id':user.id}
        else:
            return {'message': '数据库中不存在用户，或者该用户已过期！'}

    except PyJWTError as e:
        current_app.logger.error(e)
        return {'message':'tokens  验证失败！'}
